package demo1;

import java.util.HashMap;
import java.util.Map;

// 商家的信息--不属于网站本身的内容
class User {
    private String name;// 商家名称
    private String phone;// 商家电话

    public User(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public String GetName() {
        return this.name;
    }

    public String GetPhone() {
        return this.phone;
    }
}

interface WebSite {
    void Use(User user);
}

//网站类
class ConcreteWebsite implements WebSite {
    private String type;// 网站类型

    /*
     * 还有50个数据成员值可能一样的！
     */
    public ConcreteWebsite(String type) {
        this.type = type;
    }

    public String GetType() {
        return this.type;
    }

    public void Use(User user)//使用该网站
    {
        System.out.println("商家:" + user.GetName() + ",电话：" + user.GetPhone() + ",网站类型：" + type);
    }
}

// 网站工厂类，负责同一类型网站只诞生一个对象，以实现对象共享
class WebSiteFactory {
    private static Map<String, WebSite> map = new HashMap<String, WebSite>();

    public static WebSite GetWebSite(String type) {// 根据键值去查找对应的对应，如果无相应的对象先创建，再返回，如果有，直接返回该享元对象。
        Object o = map.get(type);
        if (o == null) {
            map.put(type, new ConcreteWebsite(type));
            o = map.get(type);
        }
        return (WebSite) o;
    }

    public int GetWebSiteCount() {
        return map.size();//获取网站的个数
    }
};

public class Main {
    public static void main(String[] args) {
        User user1 = new User("京东", "0851-83620667");
        User user2 = new User("美团", "0851-83625320");
        User user3 = new User("新浪微博", "0851-83625365");

        WebSite webSite1 = WebSiteFactory.GetWebSite("产品展示");
        // 计算机 版本的产品展示网站
        webSite1.Use(user1);
        // 比特培训 版本的产品展示网站
        webSite1.Use(user2);
        // 贵州大学 版本的产品展示网站
        webSite1.Use(user3);

        WebSite webSite2 = WebSiteFactory.GetWebSite("博客");
        webSite2.Use(user1);
        webSite2.Use(user2);
        webSite2.Use(user3);

    }
}



